/**
 * 表单验证规则库
 * 提供统一的表单验证规则，确保数据一致性和用户体验
 */

// 正则表达式模式
const PATTERNS = {
  EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
  PHONE: /^1[3-9]\d{9}$/,
  URL: /^https?:\/\/.+/,
  CHINESE: /^[\u4e00-\u9fa5]+$/,
  ENGLISH: /^[a-zA-Z]+$/,
  ALPHANUMERIC: /^[a-zA-Z0-9]+$/,
  USERNAME: /^[a-zA-Z0-9_-]{3,20}$/,
  PASSWORD: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{8,}$/,
  SLUG: /^[a-z0-9-]+$/,
  HEX_COLOR: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,
  IP_ADDRESS: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
  SAFE_HTML: /^[^<>'"&]*$/
}

/**
 * 基础验证规则
 */
export const baseRules = {
  /**
   * 必填验证
   * @param {string} message - 错误消息
   * @returns {Object} 验证规则
   */
  required(message = '此字段为必填项') {
    return {
      required: true,
      message,
      trigger: ['blur', 'change']
    }
  },

  /**
   * 长度验证
   * @param {number} min - 最小长度
   * @param {number} max - 最大长度
   * @param {string} message - 错误消息
   * @returns {Object} 验证规则
   */
  length(min, max, message) {
    const defaultMessage = max
      ? `长度应在 ${min} 到 ${max} 个字符之间`
      : `长度不能少于 ${min} 个字符`

    return {
      min,
      max: max || undefined,
      message: message || defaultMessage,
      trigger: ['blur', 'change']
    }
  },

  /**
   * 最小长度验证
   * @param {number} min - 最小长度
   * @param {string} message - 错误消息
   * @returns {Object} 验证规则
   */
  minLength(min, message) {
    return {
      min,
      message: message || `长度不能少于 ${min} 个字符`,
      trigger: ['blur', 'change']
    }
  },

  /**
   * 最大长度验证
   * @param {number} max - 最大长度
   * @param {string} message - 错误消息
   * @returns {Object} 验证规则
   */
  maxLength(max, message) {
    return {
      max,
      message: message || `长度不能超过 ${max} 个字符`,
      trigger: ['blur', 'change']
    }
  },

  /**
   * 模式验证
   * @param {RegExp} pattern - 正则表达式
   * @param {string} message - 错误消息
   * @returns {Object} 验证规则
   */
  pattern(pattern, message) {
    return {
      pattern,
      message: message || '格式不正确',
      trigger: ['blur', 'change']
    }
  },

  /**
   * 自定义验证
   * @param {Function} validator - 验证函数
   * @returns {Object} 验证规则
   */
  custom(validator) {
    return {
      validator,
      trigger: ['blur', 'change']
    }
  }
}

// 导出基础验证规则和模式，保留实际使用的部分
export default {
  baseRules,
  PATTERNS
}